home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / comm / misc / zvm1_19.lha / include.zvm < prev    next >
Text File  |  1993-04-24  |  7KB  |  253 lines

  1. /*             THIS IS INCLUDED FROM INCLUDE.ZVM                          */
  2. /*-------------------------HANDS OFF--------------------------------------*/
  3. /* DON'T TOUCH THIS STUFF.  IF YOU FIX SOMETHING HERE, TELL ME ABOUT IT   */
  4.  
  5. /* This function gives you a simple way of presenting an N key menu
  6.     to the caller
  7.  
  8.     ARGS:  numKeys choiceFileName badChoiceFileName timeOut validChoices
  9.     numBadChoices
  10.  
  11.     numKeys = number of keys wanted
  12.     choiceFileName = file name of the menu
  13.     badChoiceFileName = what to say if caller enters a bad choice
  14.     timeOut = number of seconds allowed before timing out
  15.     validChoices = list of characters that are valid choices
  16.     numBadChoices = number of times you want to present the menu before exiting
  17.  
  18.     RETURNS:  status, choice = valid key
  19. */
  20.  
  21. presentMenu: procedure expose choice status. mode.
  22.     parse arg numKeys,choiceFileName,badChoiceFileName,timeOut,validChoices,numBadChoices .
  23.  
  24.     timesAround = numBadChoices;
  25.  
  26.     do timesAround = numBadChoices to 1 by -1
  27.         status = playVoice(choiceFileName)
  28.  
  29.         if status > status.keyDetected then signal presentMenuDone;
  30.  
  31.         status = readNKeys(numKeys, timeOut)
  32.  
  33.         if status = status.timedOut then do
  34.             call flushPhoneBuffer()
  35.             status = playVoice('voice:voices/Timed Out')
  36.             iterate
  37.         end
  38.         if status ~= status.normal then signal presentMenuDone;
  39.  
  40.         choice = keys
  41.         if pos(choice, validChoices) = 0 then do
  42.             call flushPhoneBuffer()
  43.             status = playVoice(badChoiceFileName)
  44.             iterate
  45.         end
  46.  
  47.         return status.normal
  48.     end
  49.  
  50.     status = status.timedOut
  51. presentMenuDone:
  52.     return status
  53.  
  54. /*----------------------------------------------------------------------*/
  55. /*    Here are the encapsulated functions.  They're responsible for
  56.     communicating with ZVM.  Don't edit or touch them, except for
  57.     bug fixes.
  58. */
  59.  
  60. playVoice:  procedure expose status. mode.
  61.     parse arg fileName
  62.     address voicemail1 'playVoice' fileName
  63.     return rc
  64.  
  65. addLogEntry: procedure expose status. mode.
  66.     parse arg fileName, actualTime, duration
  67.     address voicemail1 'addLogEntry' fileName ',' actualTime ',' duration
  68.     return rc
  69.  
  70. setLogEntryStatus: procedure expose status. mode.
  71.     parse arg logEntryNumber, logEntryStatus
  72.     select
  73.         when logEntryStatus = ' ' then ls = 0
  74.         when logEntryStatus = 'a' then ls = 1
  75.         when logEntryStatus = 'd' then ls = 2
  76.         otherwise ls = -1
  77.     end
  78.     address voicemail1 'setLogEntryStatus' logEntryNumber ',' ls
  79.     return rc
  80.  
  81. getLogEntryData: procedure expose status. mode.
  82.     parse arg logEntryNumber
  83.     address voicemail1 'getLogEntryData' logEntryNumber
  84.     return result
  85.  
  86. getLogEntryFileName: procedure expose status. mode.
  87.     parse arg logEntryNumber
  88.     address voicemail1 'getLogEntryFileName' logEntryNumber
  89.     return result
  90.  
  91. getNumVoiceMessages: procedure expose status. mode.
  92.     address voicemail1 'getNumVoiceMessages'
  93.     return result
  94.  
  95. recordVoice:  procedure expose status. mode.
  96.     parse arg fileName
  97.     address voicemail1 'recordVoice' fileName
  98.     return rc
  99.  
  100. password: procedure expose status. mode.
  101.     address voicemail1 'password'
  102.     return result
  103.  
  104. hasFax: procedure expose status. mode.
  105.     address voicemail1 'hasfax'
  106.     return result
  107.  
  108. playBeep:  procedure expose status. mode.
  109.     parse arg tone1, tone2, duration
  110.     address voicemail1 'playBeep' tone1 ',' tone2 ',' duration
  111.     return rc
  112.  
  113. readNKeys:  procedure expose status. keys mode.
  114.     parse arg numKeys, timeOut
  115.     address voicemail1 'readNKeys' numKeys ',' timeOut
  116.     if rc = status.normal then keys = result
  117.     return rc
  118.  
  119. read1Key:  procedure expose status. key mode.
  120.     parse arg timeOut
  121.     address voicemail1 'read1Key' timeOut
  122.     if rc = status.normal then key = result
  123.     return rc
  124.  
  125. readKeysUntil: procedure expose status. keys mode.
  126.     parse arg terminatingCharacter, maxCharacters, timeOut
  127.     address voicemail1 'readKeysUntil' terminatingCharacter ',' maxCharacters ',' timeOut
  128.     if rc = status.normal then keys = result
  129.     return rc
  130.  
  131. readLine: procedure expose status. line mode.
  132.     parse arg timeOut
  133.     address voicemail1 'readLine' timeOut
  134.     if rc = status.normal then line = result
  135.     return rc
  136.  
  137. writeLine: procedure expose status. mode.
  138.     parse arg line
  139.     address voicemail1 'writeLine' line
  140.     return rc
  141.  
  142. /* the 'assumeUnknownMode' is to make sure that any use of a voice command WILL
  143.     cause ZVM to hang up the line, reset the modem, then do its stuff */
  144.  
  145. dropLine: procedure expose status. mode.
  146.     address voicemail1 'assumeUnknownMode'
  147.     address voicemail1 'requireMode' mode.commandMode
  148.     return rc
  149.  
  150. atCommands: procedure expose status. mode.
  151.     address voicemail1 'assumeUnknownMode'
  152.     address voicemail1 'requireMode' mode.connectedMode
  153.     return rc
  154.  
  155. use19200: procedure expose status. mode.
  156.     address voicemail1 'setserial'
  157.     return rc
  158.  
  159. flushPhoneBuffer:  procedure expose status. mode.
  160.     address voicemail1 'flushPhoneBuffer'
  161.     return status.normal
  162.  
  163. listen: procedure expose status. mode.
  164.     address voicemail1 'listen'
  165.     return status.normal
  166.  
  167. answerFax: procedure expose status. mode.
  168.     address voicemail1 'answerFax'
  169.     return rc
  170.  
  171. cTime: procedure expose status. now mode.
  172.     address voicemail1 'ctime'
  173.     return result
  174.  
  175. displayError: procedure expose status. mode.
  176.     parse arg error
  177.     address voicemail1 'displayError' error
  178.     return status.normal
  179.  
  180. displayStatus: procedure expose status. mode.
  181.     parse arg status
  182.     address voicemail1 'displayStatus' status
  183.     return status.normal
  184.  
  185. /* Effectively unlistens also! */
  186. setLastError: procedure expose status. mode.
  187.     parse arg status, error
  188.     address voicemail1 'setLastError' status ',' error
  189.  
  190. /*-----------------------------------------------------------------------*/
  191. /* signal processing */
  192. error:
  193.     say "Error " rc " at line " sigl
  194.     call listen()
  195.     exit 20
  196.  
  197. break_c:
  198. halt:
  199.     say "VoiceMail was stopped manually"
  200.     call listen()
  201.     exit 20
  202.  
  203.  
  204. novalue:
  205.     say "No Value at Line" sigl
  206.     call playVoice('voice:voices/NoValue')
  207.     call listen()
  208.     exit 20
  209.  
  210. syntax:
  211.     say 'Syntax Error at Line' sigl
  212.     call playVoice('voice:voices/SyntaxError')
  213.     call listen()
  214.     exit 20
  215.  
  216.  
  217. /* Initialize everything needed to communicate correctly with ZVM */
  218. doInitializations: procedure expose compression. mode. status. device.
  219.  
  220. /* compressions */
  221. compression.ADPCM2 = 2
  222. compression.ADPCM3 = 3
  223. compression.CELP = 1
  224.  
  225. /* devices */
  226. device.telephoneLine = 2
  227. device.externalMic = 8
  228. device.internalSpeaker = 16
  229.  
  230. /* modem modes */
  231. mode.unknownMode = -1
  232. mode.commandMode = 0
  233. mode.voiceMode = 1
  234. mode.connectedMode = 2
  235. mode.playMode = 3
  236. mode.recordMode = 4
  237.  
  238. /* return statuses from the various commands */
  239. status.normal = 0
  240. status.keyDetected = 1
  241. status.quietDetected = 2
  242. status.silenceDetected = 3
  243. status.faxDetected = 4
  244. status.busyDetected = 5
  245. status.timedOut = 6
  246. status.signalDetected = 7
  247. status.overflow = 8
  248. status.error = 9
  249.  
  250. return
  251.  
  252.  
  253.